package com.example.deepschool.enums;

import lombok.Getter;

@Getter
public enum Permissions {
	/**
	 * 登录/注册权限。
	 * 二进制位：0b1，表示该权限对应的二进制位为第1位。
	 */
	LOGIN_REGISTER( 0b1L ),
	/**
	 * 加入课程权限。
	 * 二进制位：0b10，表示该权限对应的二进制位为第2位。
	 */
	JOIN_COURSE( 0b10L ),
	/**
	 * 发布课程权限。
	 * 二进制位：0b100，表示该权限对应的二进制位为第3位。
	 */
	PUBLISH_COURSE( 0b100L ),
	/**
	 * 修改自己创建的课程权限。
	 * 二进制位：0b1000，表示该权限对应的二进制位为第4位。
	 */
	MODIFY_OWN_COURSE( 0b1000L ),
	/**
	 * 为课程评分的权限。
	 * 二进制位：0b10000，表示该权限对应的二进制位为第5位。
	 */
	RATE_COURSE( 0b10000L ),
	/**
	 * 回答知识点问题的权限。
	 * 二进制位：0b100000，表示该权限对应的二进制位为第6位。
	 */
	ANSWER_KNOWLEDGE_POINT( 0b100000L ),
	/**
	 * 提问知识点问题的权限。
	 * 二进制位：0b1000000，表示该权限对应的二进制位为第7位。
	 */
	ASK_KNOWLEDGE_POINT( 0b1000000L ),
	/**
	 * 报告不正确内容的权限。
	 * 二进制位：0b10000000，表示该权限对应的二进制位为第8位。
	 */
	REPORT_INCORRECT_CONTENT( 0b10000000L ),
	/**
	 * 审核课程信息的权限。
	 * 二进制位：0b100000000，表示该权限对应的二进制位为第9位。
	 */
	COURSE_INFO_REVIEW( 0b100000000L ),
	/**
	 * 处理违规行为的权限。
	 * 二进制位：0b1000000000，表示该权限对应的二进制位为第10位。
	 */
	HANDLE_RULE_VIOLATION( 0b1000000000L );
	
	/**
	 * 权限的数值表示。
	 * 使用Long类型存储权限的二进制表示，便于权限的检查和操作。
	 */
	private final Long value;
	
	/**
	 * 构造函数，为每个权限赋值。
	 *
	 * @param value 权限的二进制数值表示。
	 */
	Permissions ( Long value ) {
		this.value = value;
	}
	
}
